package cache

import (
	"gitee.com/gousing/cache/storage"
)

// GetUint 获取 uint 类型的缓存值, 如果不存在或已经过期则返回空值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint(key string) uint {
	val, _ := GetUintE(key)
	return val
}

// GetUintD 获取 uint 类型的缓存值, 如果不存在或已经过期则返回指定的 defaultVal 默认值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUintD(key string, defaultVal uint) uint {
	val, err := GetUintE(key)
	if err != nil {
		return defaultVal
	}
	return val
}

// GetUintE 获取 uint 类型的缓存值, 如果不存在或已经过期则返回空值和错误信息
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUintE(key string) (uint, error) {
	if key == "" {
		return 0, storage.ErrKeyIsEmpty
	}
	var val uint
	err := GetDefault().Scan(key, &val)
	return val, err
}

// GetUint8 获取 uint8 类型的缓存值, 如果不存在或已经过期则返回空值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint8(key string) uint8 {
	val, _ := GetUint8E(key)
	return val
}

// GetUint8D 获取 uint8 类型的缓存值, 如果不存在或已经过期则返回指定的 defaultVal 默认值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint8D(key string, defaultVal uint8) uint8 {
	val, err := GetUint8E(key)
	if err != nil {
		return defaultVal
	}
	return val
}

// GetUint8E 获取 uint8 类型的缓存值, 如果不存在或已经过期则返回空值和错误信息
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint8E(key string) (uint8, error) {
	if key == "" {
		return 0, storage.ErrKeyIsEmpty
	}
	var val uint8
	err := GetDefault().Scan(key, &val)
	return val, err
}

// GetUint16 获取 uint16 类型的缓存值, 如果不存在或已经过期则返回空值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint16(key string) uint16 {
	val, _ := GetUint16E(key)
	return val
}

// GetUint16D 获取 uint16 类型的缓存值, 如果不存在或已经过期则返回指定的 defaultVal 默认值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint16D(key string, defaultVal uint16) uint16 {
	val, err := GetUint16E(key)
	if err != nil {
		return defaultVal
	}
	return val
}

// GetUint16E 获取 uint16 类型的缓存值, 如果不存在或已经过期则返回空值和错误信息
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint16E(key string) (uint16, error) {
	if key == "" {
		return 0, storage.ErrKeyIsEmpty
	}
	var val uint16
	err := GetDefault().Scan(key, &val)
	return val, err
}

// GetUint32 获取 uint32 类型的缓存值, 如果不存在或已经过期则返回空值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint32(key string) uint32 {
	val, _ := GetUint32E(key)
	return val
}

// GetUint32D 获取 uint32 类型的缓存值, 如果不存在或已经过期则返回指定的 defaultVal 默认值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint32D(key string, defaultVal uint32) uint32 {
	val, err := GetUint32E(key)
	if err != nil {
		return defaultVal
	}
	return val
}

// GetUint32E 获取 uint32 类型的缓存值, 如果不存在或已经过期则返回空值和错误信息
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint32E(key string) (uint32, error) {
	if key == "" {
		return 0, storage.ErrKeyIsEmpty
	}
	var val uint32
	err := GetDefault().Scan(key, &val)
	return val, err
}

// GetUint64 获取 uint64 类型的缓存值, 如果不存在或已经过期则返回空值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint64(key string) uint64 {
	val, _ := GetUint64E(key)
	return val
}

// GetUint64D 获取 uint64 类型的缓存值, 如果不存在或已经过期则返回指定的 defaultVal 默认值
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint64D(key string, defaultVal uint64) uint64 {
	val, err := GetUint64E(key)
	if err != nil {
		return defaultVal
	}
	return val
}

// GetUint64E 获取 uint64 类型的缓存值, 如果不存在或已经过期则返回空值和错误信息
//   - 支持自动转换类型: string, intX, uintX, floatX 以及实现了 values.IntX/UintX 适配接口的类型
func GetUint64E(key string) (uint64, error) {
	if key == "" {
		return 0, storage.ErrKeyIsEmpty
	}
	var val uint64
	err := GetDefault().Scan(key, &val)
	return val, err
}
